本次參加鐵人賽收穫很多,雖然邊寫邊學、每天都在趕十二點,不過最後也完成 To-Do List 實作 PWA 的簡單範例,可以完成離線瀏覽的網站還蠻有趣的。
奉上範例:
特別感謝 洪名辰 幫忙 code review
首先分享和 PWA 相關的觀念,再『從零開始』寫 To-Do List 的 DEMO,最初規劃架構、建立環境,接著描述案例需求,透過原生 JS 寫對應的行為,然後加入 Service Workers
搭配 webpack
& webpack-dev-server
執行,完成離線瀏覽的功能,最後再改寫成 React
+ Redux
的案例,完成 To-Do List 的開發。
PWA 基本概念
實作 Service Worker
實作簡單 PWA 範例 (原生 JavaScript)
precache 工具 - 簡介/應用
實作簡單 PWA 範例 (React + Redux)
29 - 介紹 Offline Storage
30 - 最終回《也是一個新的開始》
其實想學習的還有好多好多,先列出之前有規劃但沒有完成的部分:
PWA 基本概念
Production
目前完成的範例是 Service Worker 搭配 Cache Api,只能夠 cache 靜態資源和 GET 的資料,不過對於內容為主的網站來說,很夠用了,但之後希望能夠實作 IndexedDB,比較全面。
經過 30 天的 PWA 學習筆記,後續參加了 F2E&RGBA Meetup 一月號的聚會,和大家分享 PWA 學習的一些心得:
http://www.slideshare.net/newstory0113/pwa-html5
額外針對當天 Q&A 問題做進一步的補充:
Q1: Service Worker 程式碼裡面的 self 是什麼?
A: self 會指向 ServiceWorkerGlobalScope,一定要使用 self,才能找到對應的屬性以及註冊、快取等事件。
資料來源:
Q2: cache 有沒有容量限制?
A: 可以參考這篇: What is the storage limit for a service worker?
另外『Offline Storage for Progressive Web Apps』文章裡面有提到
Let’s get right to the point with a general recommendation for storing data offline:
For URL addressable resources, use the Cache API (part of service workers).
For all other data, use IndexedDB (with a Promises wrapper).
理由是 Cache API 和 IndexedDB 都是非同步 (IndexedDB is event based and the Cache API is Promise based),均可以在 web workers、window、service workers 這三種環境裡運作。
Pokedex Progressive Web App 的案例,就是使用 Cache API 和 IndexedDB 作為 Offline Storage。
資料來源:
Q3: 是否能自動產生 Service Worker 檔案?
A: Yes,可以使用 sw-precache,或者搭配 webpack 使用 sw-precache-webpack-plugin。
資料來源:
Q4: 是否有工具可以檢測 PWA 網站?
A: 有的,官方有釋出 Lighthouse,可以針對 PWA 做評分。
資料來源:
小聚分享的兩個影片:
還有其他感謝的人,待補充 m(_ _)m